import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;

/*
方法一：使用了集合和队列
时间复杂度高，但比较好控制
 */
class Solution {
    public int lengthOfLongestSubstring(String s) {
        Set<Character> set=new HashSet<>();
        Queue<Character> queue=new LinkedList<>();
        int len=0;

        for (int i = 0; i < s.length(); i++) {
            char ch=s.charAt(i);
            if(set.contains(ch)==false){
                set.add(ch);
                queue.offer(ch);
            }else{
                len=Math.max(len,set.size());
                while(set.contains(ch)==true){
                    char tem=queue.poll();
                    set.remove(tem);
                }
                set.add(ch);
                queue.offer(ch);
            }
        }

        return Math.max(len, set.size());
    }
}